/*
 * Copyright (c) 2013, 5 Idiots. All rights reserved.
 */
package safari.model.transaction;

import java.sql.SQLException;

import org.mybatis.spring.SqlSessionTemplate;

import safari.model.member.MemberVO;
import safari.model.sell.SellBoardVO;
/**
 * TransactionServiceImpl 클래스
 * @author Harry
 *
 */
public class TransactionServiceImpl implements TransactionService {
	private TransactionDao transactionDao;
	public TransactionServiceImpl(TransactionDao transactionDao){
		this.transactionDao=transactionDao;
	}
	
	@Override
	public MemberVO transaction(String buyerId, String sellerId, SellBoardVO svo)
			throws SQLException, SellBoardTransactionException {
		MemberVO mvo=null;
		int price=svo.getProductPrice();
		int balance=transactionDao.selectBalance(buyerId);
		if(balance<price){
			throw new SellBoardTransactionException("잔여 포인트가 부족합니다.");
		}else if(svo.getSellStatus().equals("판매완료")){
			throw new SellBoardTransactionException("이미 판매된 상품입니다.");
		} else if(svo.getSellStatus().equals("판매중")){
		// 트랜잭션 시작
		transactionDao.updateBuyer(new TransactionVO(buyerId, price));
		transactionDao.updateSeller(new TransactionVO(sellerId, price));
		transactionDao.updateSellStatus("판매완료", svo.getSellNo());
		transactionDao.insertTradeHistory(new TradeHistoryVO(new SellBoardVO(svo.getSellNo()), buyerId, sellerId));
		// 거래가 성공하면 회원이 보유하고 있는 포인트 정보를 새로 갱신해야 하므로, 
		// 새로운 세션 세팅을 하기위해서 회원정보를 조회한다.
		mvo=transactionDao.selectMember(buyerId);
		System.out.println("거래 후 바뀐 정보 조회 : "+mvo);
		}
		return mvo;
	}

}
